import router from '@/router'
import { useUserStore } from '@/stores/user'
import axios, { type Method } from 'axios'
import { ElMessage } from 'element-plus'

const service = axios.create({
  baseURL: 'https://api-hmzs.itheima.net/tj',
  timeout: 20 * 1000,
})

// 后端返回值类型
export interface ServiceResponse<T>{
  code: number
  msg: string
  data:T
}


export const request = <T>(url: string, method: Method = 'GET', submitData?: object) => {
  return service.request<T,ServiceResponse<T>>({
    url:url,
    method: method,
    [ method.toUpperCase() === 'GET' ? 'params' : 'data'] : submitData
  })
}


// 添加请求拦截器
service.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  const store = useUserStore()
  if (store.token) {
    config.headers.Authorization = `Bearer ${store.token}`
  }
return config;
}, function (error) {
// 对请求错误做些什么
return Promise.reject(error);
});


// // 添加响应拦截器
service.interceptors.response.use(function (response) {
// 2xx 范围内的状态码都会触发该函数。
// 对响应数据做点什么
return response.data;
}, function (error) {
 // 超出 2xx 范围的状态码都会触发该函数。
  // 对响应错误做点什么
  // 提示错误信息
  ElMessage.error(error.response.data.msg)
  if (error.response.status === 401) {
    router.push('/login')
    const store = useUserStore()
    store.clearToken()
  } else {
    ElMessage.error('网络错误,请稍后再试')
  }
 return Promise.reject(error);
});

export default service
